package com.groupfour.attendancemanagementsystem.service;

import com.groupfour.attendancemanagementsystem.entity.DTO.*;
import com.groupfour.attendancemanagementsystem.entity.VO.CheckStudentVO;
import com.groupfour.attendancemanagementsystem.entity.VO.CourseVO;

import java.util.List;
import java.util.Map;

/**
 *
 */
public interface CourseService{
    /**
     * @author： xin
     * @param： null
     * @return： List<String>
     * @exception: none
     * @describe： 查询所有课程名返回给搜索下拉框
     */
    List<String> findCourseName();
    /**
     * @author： xin
     * @param： null
     * @return： List<String>
     * @exception: none
     * @describe： 查询所有实训老师返回给搜索下拉框
     */
    List<TeacherInfoDTO> findTrainTeacher();
    /**
     * @author： xin
     * @param： null
     * @return： List<String>
     * @exception: none
     * @describe： 查询所有责任老师返回给搜索下拉框
     */
    List<TeacherInfoDTO> findDutyTeacher();
    /**
    * @author： xin
    * @param： courseDTO
    * @return： CourseVO
    * @exception: none
    * @describe： 按照表单提交进行查询
    */
    Map<String,Object> findCourseByCourseDTO(CourseDTO courseDTO, Integer pageNum, Integer pageSize);
    /**
    * @author： xin
    * @param： null
    * @return： List<CourseVO>
    * @exception: none
    * @describe： 查询所有课程
    */
    Map<String ,Object> findAllCourse(Integer page,Integer pageSize);
    /**
    * @author： xin
    * @param： courseDTOByAdd
    * @return： Integer
    * @exception: none
    * @describe： 新增课程
    */
    Integer addCourse(CourseDTOByAdd courseDTOByAdd);
    /**
    * @author： xin
    * @param： courseDTOByUpdate
    * @return： Integer
    * @exception: none
    * @describe： 修改课程
    */
    Integer updateCourse(CourseDTOByUpdate courseDTOByUpdate, String courseCode);
    /**
    * @author： xin
    * @param： null
    * @return： List
    * @exception: none
    * @describe： 查询项目组名称
    */
    List<GroupInfoDTO> findGroupNames();
    /**
    * @author： xin
    * @param： courseName
    * @return： List
    * @exception: none
    * @describe： 选择学生
    */
    List<StudentInfoDTO> chooseStudent(String courseName);
    /**
    * @author： xin
    * @param： courseName，studentName
    * @return： List
    * @exception: none
    * @describe： 添加学生课程
    */
    int addStudentInCourse(StudentInCourseDTO studentInCourseDTO);
    /**
    * @author： xin
    * @param： studentCode，pageNum，pageSize
    * @return： CourseVO
    * @exception: none
    * @describe： 查询学生的课程
    */
    Map<String,Object> findAllStudentCourse(String studentCode,Integer pageNum,Integer pageSize);
    /**
    * @author： xin
    * @param： studentCode,pageNum,pageSize,courseDTO
    * @return： CourseVO
    * @exception: none
    * @describe： 根据表单DTO信息，查询学生课程
    */
    Map<String,Object> findStudentCourse(String studentCode,Integer pageNum,Integer pageSize,CourseDTO courseDTO);
    /**
     * @author： xin
     * @param： teacherCode，pageNum，pageSize
     * @return： CourseVO
     * @exception: none
     * @describe： 查询教师课程
     */
    Map<String,Object> findAllTeacherCourse(String teacherCode,Integer pageNum,Integer pageSize);
    /**
     * @author： xin
     * @param： teacherCode,pageNum,pageSize,courseDTO
     * @return： CourseVO
     * @exception: none
     * @describe： 根据表单DTO信息，查询教师课程
     */
    Map<String,Object> findTeacherCourse(String teacherCode,Integer pageNum,Integer pageSize,CourseDTO courseDTO);
    /**
     * @author： xin
     * @param： null
     * @return： List<String>
     * @exception: none
     * @describe： 查询项目组名称
     */
    List<String> findAllGroupName();
    /**
     * @author： xin
     * @param： null
     * @return： List<String>
     * @exception: none
     * @describe： 查询专业名称
     */
    List<String> findAllMajor();
    /**
     * @author： xin
     * @param： null
     * @return： List<String>
     * @exception: none
     * @describe： 查询班级名称
     */
    List<String> findAllClasses();
    /**
    * @author： xin
    * @param：  courseCode,checkStudentDTO
    * @return： List<CheckStudentVO>
    * @exception: none
    * @describe： 根据课程编号，以及表单传入DTO，查询这门课老师所教的学生
    */
    List<CheckStudentVO> checkAllStudent(String courseCode, CheckStudentDTO checkStudentDTO);
    /**
    * @author： xin
    * @param： courseCode
    * @return： Integer
    * @exception: none
    * @describe： 删除课程
    */
    Integer deleteCourse(String courseCode);
}
